#ifndef __TYPEDEF_H_
#define __TYPEDEF_H_

#include "stdint.h"

//******************************UI部分数据结构类型******************************//

/*------------------------------------        -----------------------------------*/
typedef enum
{
	NO=0,
	YES=1
}FlagDef;

typedef enum
{
  	CCW = 0,               //低电平逆时针
	CW  = 1,               //高电平顺时针
}DirDef;

/*------------------------------------- 运动状态 -----------------------------------*/
typedef enum
{
  	FREE = 0,               //已完成旋转
	BUSY = 1,               //未完成
}StatusDef;

/*------------------------------------ 定义二维坐标点 -----------------------------------*/
typedef struct
{
	int x;
	int y;
}PointDef;

/*------------------------------------ 定义触摸点 -----------------------------------*/
typedef struct
{
	PointDef point;
	FlagDef flag;
}TouchPointDef;

/*------------------------------------ 定义屏幕触摸方块 -----------------------------------*/
typedef struct
{
	int xl;
	int xh;
	int yl;
	int yh;
}RectAreaDef;

/*------------------------------------ UI管理 -----------------------------------*/
typedef struct
{
	int uiIndex;
	FlagDef initflag[10];
}UiControlDef;

//****************************************************************************************//

/*------------------------------------- 运动方向 -----------------------------------*/

/*------------------------------------ 步进电机结构体 -----------------------------------*/
typedef struct
{
	int currentPulsePos; 		//当前脉冲位置
	int taragetPulsePos; 		//目标脉冲位置
	StatusDef stepStatus; 	    //电机工作状态(0,0)-->(0,1) 过程为busy
	float stepDelay;				//驱动延时计数器
	float stepDelayReload;		//驱动延时计数重装载数值
	int distanceLength;			//移动脉冲计算
	DirDef nowDir;         		//暂存转动方向
	int pulseCount;
	int setPulseLevel;

}StepObiectDef;


typedef struct
{

  int xCoordinate; 	//X坐标
  int yCoordinate; 	//Y坐标

}SingleCoordinateDef;//坐标存储

typedef struct
{
	SingleCoordinateDef* targetPointer;
	PointDef commonpoint;
	PointDef cornerPoint[4];
	StatusDef workStatus;      //从(0,3)-->(20,100) 过程为busy
	int loop;
	int pointNum;
	int pointindex;
	int loopnum;
	int spinspeed;
	int fineunit;
	int fineindex;
	int pauseFlag;
	int traceStartFlag;
	int traceFinishFlag;
	int receiveFlag;
	int receiveCount;
	int traceDelayCount;
}ControlObjectDef;

/*---------------------------------------------------------------------------------------*/
typedef struct
{
 uint8_t rxProBuf[1024]; 	//串口接收缓冲区

}RxProBufDef;//串口接收缓冲

typedef struct
{

  int rectangleCoordinateX[512]; 	//X坐标
  int rectangleCoordinateY[512]; 	//Y坐标
  int coordinateNum; 	//坐标总数量

}RectangleCoordinateDef;//路线坐标存储



typedef struct
{

  int xCoordinate; 	//X坐标
  int yCoordinate; 	//Y坐标

}SinglePWMCoorDef;//坐标存储

//PID结构体
typedef struct
{
    float Kp,Ki,Kd;//PID调节参数
    float Bias;//本次误差
    float Last_bias,Prev_bias;//上一次和上上次误差
    float Integral_bias,IntegralMAX; //积分和,积分限幅参数
    int   Dead_zone; //死区
    int   Integral_zone; //积分分离区域
    int   Pid_out; //pid输出
}PIDDef;


#endif
